2023/12/231334字符

可迭代协议

const arr = [1, 2, 3, 4, 5];

const iterator = arr[Symbol.iterator]();
iterator.next();  //--> {value: 1, done: false}
iterator.next();  //--> {value: 2, done: false}
iterator.next();  //--> {value: 3, done: false}
const arr = [1, 2, 3, 4, 5];

const iterator = arr[Symbol.iterator]();
let result = iterator.next();
while (!result.done) {
    let item = result.value;
    console.log(item);  //--> 1 2 3 4 5
    // 下一次迭代
    result = iterator.next();
}

// 语法糖 循环可迭代对象
for (const item of arr) {  // for of 返回的是value值,for in 返回的是key值
    console.log(item);  //--> 1 2 3 4 5
}

可迭代对象都能进行 for of 循环

对象转数组

const obj = {
    name: 'baozai',
    age: 18,
    sex: 'boy',
    // 对象转数组
    [Symbol.iterator] () {
        const values = Object.values(this);
        let i = 0;
        return {
            next: () => {
                const result = {
                    value: values,
                    done: i >= values.length
                }
                i++;
                return result;
            }
        }
    }
}
let value = obj[Symbol.iterator]().next().value;
console.log(value)  //-->  ["baozai", 18, "boy"]